const Validate = {
  // 邮箱校验
  email: (rule, value, callback) => {
    let regexp = /^[a-z0-9]+([._-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确格式的邮箱"));
      }
    } else {
      callback();
    }
  },
  // 手机号校验
  mobile: (rule, value, callback) => {
    let regexp = /^(\+)?(0|86|086|17951)?(-)?[0-9]{11}$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确的手机号"));
      }
    } else {
      callback();
    }
  },
  // 座机校验
  tel: (rule, value, callback) => {
    let regexp = /^((0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确的电话号"));
      }
    } else {
      callback();
    }
  },
  userMobile: (rule, value, callback) => {
    console.log("输入的手机号", value);
    var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
    if (value) {
      value = value.toString();
      if (value.match(myreg)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确的手机号"));
      }
    } else {
      callback();
    }
  },
  // 手机加座机
  mobileTel: (rule, value, callback) => {
    let regexp = /^(\+)?(0|86|086|17951)?(-)?[0-9]{11}$/;
    let regexp2 = /^((0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
    if (value) {
      if (value.match(regexp) || value.match(regexp2)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确的电话号"));
      }
    } else {
      callback();
    }
  },
  // 身份证校验
  identification: (rule, value, callback) => {
    // let regexp = /(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    // if (value) {
    //   if (value.length !== 18) {
    //     callback(new Error(rule.message || "身份证号码为18位！"));
    //   } else if (value.match(regexp)) {
    //     callback();
    //   } else {
    //     callback(
    //       new Error(rule.message || "身份证必须是数字或者数字与字母组合！")
    //     );
    //   }
    // } else {
    //   callback();
    // }
    var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
    if (value) {
      if (value.length !== 18) {
        callback(new Error(rule.message || "身份证号码为18位！"));
      } else if (value.match(format)) {
        callback();
      } else {
        callback(
          new Error(rule.message || "身份证必须是数字或者数字与字母组合！")
        );
      }
    } else {
      callback();
    }
  },
  // 传真
  fax: (rule, value, callback) => {
    let regexp = /^(\d{3,4}-)?\d{7,8}$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确的传真"));
      }
    } else {
      callback();
    }
  },
  // 邮编
  stamp: (rule, value, callback) => {
    let regexp = /^[0-9]{6}$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else if (value.toString().length > 6) {
        return callback(new Error(`邮编总长度不能大于6`));
      } else {
        callback(new Error(rule.message || "请输入正确格式的邮政编码"));
      }
    } else {
      callback();
    }
  },
  // 中英文姓名
  userName: (rule, value, callback) => {
    let regexp = /^[a-zA-Z\u4e00-\u9fa5 ]{1,20}$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确格式的姓名"));
      }
    } else {
      callback();
    }
  },
  // 长度2到5个字符
  userName2: (rule, value, callback) => {
    let regexp = /^\D{2,5}$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "长度在 2 到 5 个字符"));
      }
    } else {
      callback();
    }
  },
  // 纯中文校验
  chinese: (rule, value, callback) => {
    let regexp = /^[\u4e00-\u9fa5]*$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入中文"));
      }
    } else {
      callback();
    }
  },
  // 纯字母校验
  letter: (rule, value, callback) => {
    let regexp = /^[A-Za-z]+$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入字母"));
      }
    } else {
      callback();
    }
  },
  // 大写字母
  uppercase: (rule, value, callback) => {
    let regexp = /^[A-Z]+$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入大写字母"));
      }
    } else {
      callback();
    }
  },
  // 小写字母
  lowercase: (rule, value, callback) => {
    let regexp = /^[a-z]+$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入小写字母"));
      }
    } else {
      callback();
    }
  },
  alphabets: (rule, value, callback) => {
    let regexp = /^[A-Za-z]+$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入字母"));
      }
    } else {
      callback();
    }
  },
  // 数字和字母
  numAndLetter: (rule, value, callback) => {
    let regexp = /^[0-9a-zA-Z]*$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "只能输入字母和数字！"));
      }
    } else {
      callback();
    }
  },
  // 数字和字母和横杠
  numAndLetterAndCross: (rule, value, callback) => {
    let regexp = /^[0-9a-zA-Z][0-9a-zA-Z-_——]*$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "只能输入字母、数字、横杠！"));
      }
    } else {
      callback();
    }
  },
  // 数字校验
  number: (rule, value, callback) => {
    let regexp = /^[1-9]{1}[0-9]*$/;
    let regexp1 = /^[1-9]{1}[0-9]*$|^[+]{0,1}(\d+\.\d+)$/;
    if (value) {
      if (rule.dot) {
        if (value.match(regexp1)) {
          callback();
        } else {
          callback(new Error(rule.message || "必须输入正数"));
        }
      } else {
        if (value.match(regexp)) {
          callback();
        } else {
          callback(new Error(rule.message || "必须输入正整数"));
        }
      }
    } else {
      callback();
    }
  },
  // 数字两位小数
  number2: (rule, value, callback) => {
    let regexp = /^[0-9]+([.]{1}[0-9]{1,2})?$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "只能输入数字，精确至两位小数"));
      }
    } else {
      callback();
    }
  },
  // 库存量校验,最大5位
  skuNum: (rule, value, callback) => {
    let regexp = /^[1-9]\d{0,4}$/;
    if (value) {
      value = value.toString();
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确格式"));
      }
    } else {
      callback();
    }
  },
  // 校验金额最多8位整数
  money: (rule, money, callback) => {
    // let regexp = /^(\d{0,9})|(\d{0,6})(\.(\d{0,2}))?$/g;
    let regexp = /(^[1-9]([0-9]+)?(\.[0-9]{2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
    if (money) {
      if (money.length > 8) {
        if (money.toString().indexOf(".") == -1) {
          callback(
            new Error(
              rule.message || "请输入正确格式(最多8位整数或8位整数和两位小数)"
            )
          );
        }
      }
      if (regexp.test(money)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确格式"));
      }
    } else {
      callback();
    }
  },
  // 护照号校验
  passportNo: (rule, passportNo, callback) => {
    let regxp = /^((1[45]\d{7})|(G\d{8})|(E\d{8})|(P\d{7})|(S\d{7,8}))?$/;
    if (passportNo) {
      if (passportNo.match(regxp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确格式"));
      }
    } else {
      callback();
    }
  },
  // 年龄校验
  age: (rule, str, callback) => {
    let age;
    let pattern = /^(([0-9]|[1-9][0-9]|1[0-7][0-9])(\\.[0-9]+)?|180)$/;
    if (str) {
      age = parseInt(str);
      if (pattern.test(age)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入正确的年龄"));
      }
    } else {
      callback();
    }
  },
  validURL: (rule, value, callback) => {
    const regexp = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(new Error(rule.message || "请输入合法的url"));
      }
    } else {
      callback();
    }
  },
  // 清单编码格式校验
  codes: (rule, value, callback) => {
    const regexp = /(([A-Za-z0-9]{1,}[-]{0,1}){0,})[A-Za-z0-9]{1,}$/;
    if (value) {
      if (value.match(regexp)) {
        callback();
      } else {
        callback(
          new Error(
            rule.message ||
              "请输入正确的清单编码只能输入字母、数字及英文的" -
                ",不能连续输入英文的" -
                ",并且只能以数字或字母开头"
          )
        );
      }
    } else {
      callback();
    }
  }
};

export default Validate;
